<?php


/**
 * 文件大小单位换算
 */
if (!function_exists('human_file_size')) {
    function human_file_size($bytes, $decimals = 2)
    {
        $size = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
        //$factor = floor((strlen($bytes) - 1) / 3);
        $factor = floor(log($bytes, 1024));
        return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $size[$factor];
    }
}


//验证验证码
function check_captcha($input_captcha)
{
    if ($input_captcha) {
        $seccode = session('seccode');
        if (strtoupper($input_captcha) == $seccode) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

//生成验证码
function generate_captcha()
{
    ob_clean();
    $seccode = makeSeccode();
    $code = new \App\Support\seccode();
    $code->code = $seccode;
    $code->width = 90;
    $code->height = 26;
    $code->background = 1;
    $code->adulterate = 1;
    $code->scatter = '';
    $code->color = 1;
    $code->size = 0;
    $code->shadow = 1;
    $code->animator = 0;
    $code->datapath = 'seccode/';
    return response($code->display())->header('Content-Type', 'image/jpeg');
}

function makeSeccode()
{
    $seccode = random(6, 1);
    $seccodeunits = '';

    $s = sprintf('%04s', base_convert($seccode, 10, 23));
    $seccodeunits = 'ABCEFGHJKMPRTVXY2346789';
    if ($seccodeunits) {
        $seccode = '';
        for ($i = 0; $i < 4; $i++) {
            $unit = ord($s{$i});
            $seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57];
        }
    }
    session(['seccode' => $seccode]);
    return $seccode;
}

function random($length, $numeric = 0)
{
    $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
    $seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
    $hash = '';
    $max = strlen($seed) - 1;
    for ($i = 0; $i < $length; $i++) {
        $hash .= $seed{mt_rand(0, $max)};
    }
    return $hash;
}

//trim单个或数组中的字符串
function trim_fileds($inputs)
{
    $params = '';
    if (is_array($inputs)) {
        foreach ($inputs as $k => $v) {
            $params[$k] = trim($v);
        }
    } else {
        $params = trim($inputs);
    }
    return $params;
}

/*闪存重定向
 * $url       重定向地址
 *$message    提示信息
 *$type       提示类别，1不带原始提交的参数，2携带原始提交的参数
 * 跳转的页面用session接收传递的参数message
 */
function show_message($url, $message, $type = 1)
{
    if ($type == 2) {
        return redirect($url)->with('message', $message)->withInput();
    } else {
        return redirect($url)->with('message', $message);
    }
}


function getRandNum($length = 6)
{
    $key = '';
    $pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
    for ($i = 0; $i < $length; $i++) {
        $key .= $pattern{mt_rand(0, 35)};    //生成php随机数
    }
    return $key;
}

//重新加密
function setMd5ByMark($password, $mark = '')
{
    return md5(md5($password) . $mark);

}

/*替换集合中某字段的值为另一集合中的值
 *$collection       被替换集合
 *$textArr    目标集合
 *$name       被替换集合中的字段名
 *$replaceName       目标集合中字段名
 */
function replace_field($collection, $textArr, $name, $replaceName)
{
    foreach ($collection as $col) {
        foreach ($textArr as $text) {
            if ($col->$name == $text->$name) {
                $col->$name = $text->$replaceName;
            }
        }
    }
}


if (!function_exists('msubstr')) {
    /**
     * 字符截取,支持中英文
     *
     * @param $str
     * @param int $start
     * @param $length
     * @param string $charset
     * @param bool|true $suffix
     * @return string
     * author zl
     */
    function msubstr($str, $start = 0, $length, $charset = "utf-8", $suffix = true)
    {
        if (function_exists("mb_substr"))
            return mb_substr($str, $start, $length, $charset);
        elseif (function_exists('iconv_substr')) {
            return iconv_substr($str, $start, $length, $charset);
        }
        $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("", array_slice($match[0], $start, $length));
        if ($suffix) return $slice . "…";
        return $slice;
    }
}


function childTree($res, $myid, $mid, $pid, $level = 0)
{
    static $childs = array();
    foreach ($res as $k => $v) {
        if ($v[$pid] == $myid) {
            $v['prefix'] = $level ? str_repeat('&nbsp;', $level * 4) . '∟&nbsp;' : str_repeat('&nbsp;', $level * 4);
            $childs[] = $v;
            childTree($res, $v[$mid], $mid, $pid, $level + 1);
        }
    }
    return $childs;

}

/** 二维数组无限级分类(找下级)  BY ZJC
 * Array    $m     需要递归查询的结果集
 * String   $name      需要查询下级从属的ID
 * Int      $pid     数据库中ID的字段名
 * return Array   返回循环查找后的二维数组结果
 */
function levelTree($res, $idField, $pidField, $pid = 0)
{
    $arr = array();
    if (empty($res)) {
        return $arr;
    }
    foreach ($res as $v) {
        if ($v[$pidField] == $pid) {
            $v['child'] = levelTree($res, $idField, $pidField, $v[$idField]);
            $arr[] = $v;
        }
    }
    return $arr;
}

//对二维数组进行某个字段的升序排列
function sortArrayAsc($preData, $sortType = 'sort')
{
    $sortData = array();
    foreach ($preData as $key_i => $value_i) {
        $sort_i = $value_i[$sortType];
        $min_key = '';
        $sort_total = count($sortData);
        foreach ($sortData as $key_j => $value_j) {
            if ($sort_i < $value_j[$sortType]) {
                $min_key = $key_j + 1;
                break;
            }
        }
        if (empty($min_key)) {
            array_push($sortData, $value_i);
        } else {
            $sortData1 = array_slice($sortData, 0, $min_key - 1);
            array_push($sortData1, $value_i);
            if (($min_key - 1) < $sort_total) {
                $sortData2 = array_slice($sortData, $min_key - 1);
                foreach ($sortData2 as $value) {
                    array_push($sortData1, $value);
                }
            }
            $sortData = $sortData1;
        }
    }
    return $sortData;
}

function mult_unique($array)
{
    $return = array();
    foreach ($array as $key => $v) {
        if (!in_array($v, $return)) {
            $return[$key] = $v;
        }
    }
    return $return;
}

if (!function_exists('changeArray')) {
    /**
     * @param $arr    查询出来的数组数据
     * @param $field  作为数组键的字段名
     * 转换数组键值
     */
    function changeArray($arr, $field)
    {
        $data = array();
        foreach ($arr as $key => $item) {
            $data[$item[$field]] = $item;
        }
        return $data;
    }
}
/***
 * 生成订单号
 */
if (!function_exists('createOrderNo')) {
    function createOrderNo()
    {
        list($tmp1, $tmp2) = explode(' ', microtime());
        $msec = (int)sprintf('%.0f', (floatval($tmp1) + floatval($tmp2)) * 1000);
        return $msec;
    }
}


if (!function_exists('upload')) {
    /**
     * 图片上传
     *
     * @return \App\Support\Uploads\Upload
     * author zl <178417451@qq.com>
     */
    function upload()
    {
        $upload = new App\Support\Uploads\Upload();
        return $upload;
    }
}

if (!function_exists('articleCategorySelect')) {
    /**
     * 文章分类选择
     *
     * @return \App\Support\Uploads\Upload
     * author zl <178417451@qq.com>
     */
    function articleCategorySelect($id = '')
    {
        $category = new \App\Models\ArticleCategory();
        return $category->caregorySelect($id);
    }
}

if (!function_exists('getSysBasicInfo')) {
    function getSysBasicInfo()
    {
        $info = [];
        $info['sysos'] = $_SERVER["SERVER_SOFTWARE"];      //获取服务器标识的字串
        $info['os'] = PHP_OS;
        $info['sysversion'] = PHP_VERSION;                   //获取PHP服务器版本
        //从服务器中获取GD库的信息
        if (function_exists("gd_info")) {
            $gd = gd_info();
            $info['gdinfo'] = $gd['GD Version'];
        } else {
            $info['gdinfo'] = "未知";
        }
        //从PHP配置文件中获得是否可以远程文件获取
        $info['allowurl'] = ini_get("allow_url_fopen") ? "支持" : "不支持";
        //从PHP配置文件中获得最大上传限制
        $info['max_upload'] = ini_get("file_uploads") ? ini_get("upload_max_filesize") : "Disabled";
        //从PHP配置文件中获得脚本的最大执行时间
        $info['max_ex_time'] = ini_get("max_execution_time") . "秒";
        //以下两条获取服务器时间，中国大陆采用的是东八区的时间,设置时区写成Etc/GMT-8
        date_default_timezone_set("Etc/GMT-8");
        $info['systemtime'] = date("Y-m-d H:i:s", time());
        return $info;
    }

}

function roleArr($role)
{
    $arr['host'] = ['r2', 'host', 'r1'];
    $arr['r1'] = ['host', 'r1', 'r2'];
    $arr['r2'] = ['r1', 'r2', 'host'];
    return $arr[$role];
}

function checkRole($room)
{

    $players['host'] = $this->member->getMember($room['host']);
    if ($room['r1']) {
        $players['r1'] = $this->member->getMember($room['r1']);
    }
    if ($room['r2']) {
        $players['r2'] = $this->member->getMember($room['r2']);
    }
    $mid = session('mid');
    switch ($mid) {
        case $room['host'] :
            $role = 'host';
            $players['host'] = $this->member->getMember($room['host']);
            break;
        case $room['r1'] :
            $role = 'r1';
            break;
        case $room['r2'] :
            $role = 'r2';
            break;
    }
    $arr['host'] = ['r2', 'host', 'r1'];
    $arr['r1'] = ['host', 'r1', 'r2'];
    $arr['r2'] = ['r1', 'r2', 'host'];
    return $arr[$role];
}

function object_array($array)
{
    if (is_object($array)) {
        $array = (array)$array;
    }
    if (is_array($array)) {
        foreach ($array as $key => $value) {
            $array[$key] = object_array($value);
        }
    }
    return $array;
}

function hu($cards)
{
    static $jiang = 0;         //   将牌标志，即牌型“三三三三二”中的“二”
    static $arr = '';          //   将牌标志，即牌型“三三三三二”中的“二”
    if (!remain($cards)) {     //   递归退出条件：如果没有剩牌，则和牌返回。
        return $arr;
    }
    $j = 1;
    for ($i = 1; !$cards[$j] && $i < 24; $i++) {  //   找到有牌的地方，i就是当前牌,   $card[$i]是个数
        $j = $i;
    }
//    echo "j= $j <br/>";                       //   跟踪信息
    if ($cards[$j] == 4) {                    //   4张组合(杠子)   如果当前牌数等于4张
        $arr[2][] = $j;
        $cards[$j] = 0;                       //   除开全部4张牌
        if (hu($cards)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] = 4;                       //   否则，取消4张组合
    }
    if ($cards[$j] >= 3) {                    //   3张组合(大对)  如果当前牌不少于3张
        $arr[4][] = $j;
        $cards[$j] -= 3;                      //   减去3张牌
        if (hu($cards)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] += 3;                      //   取消3张组合
    }
    if (!$jiang && $cards[$j] >= 2) {        //   2张组合(将牌)  如果之前没有将牌，且当前牌不少于2张
        $jiang = 1;                           //   设置将牌标志
        $arr[1] = $j;
        $cards[$j] -= 2;                      //   减去2张牌
        if (hu($cards)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] += 2;                      //   取消2张组合
        $jiang = 0;                           //   清除将牌标志
    }
    if ($j > 20) {                            //   “中发白”没有顺牌组合，不和
        return 0;
    }
    //   顺牌组合，注意是从前往后组合！
    //   排除数值为8和9的牌
    //   如果后面有连续两张牌
    if ($j % 10 != 8 && $j % 10 != 9 && $cards[$j + 1] && $cards[$j + 2]) {
        //   各牌数减1
        $cards[$j]--;
        $cards[$j + 1]--;
        $cards[$j + 2]--;
        $arr[3][] = [$j, $j + 1, $j + 2];
        //   如果剩余的牌组合成功，和牌
        if (hu($cards)) {
            return $arr;
        }
        //   恢复各牌数
        $cards[$j]++;
        $cards[$j + 1]++;
        $cards[$j + 2]++;
    }
    return 0;   //   无法全部组合，不和！
}

//   检查剩余牌数
function remain($cards)
{
    $sum = 0;
    for ($i = 1; $i < 24; $i++) {
        $sum += $cards[$i];
    }
    return $sum;
}


//   检查剩余牌数
function remain2($cards)
{
    $sum = 0;
    for ($i = 1; $i < 38; $i++) {
        $sum += $cards[$i];
    }
    return $sum;
}

function hu2($cards)
{
    static $jiang = 0;         //   将牌标志，即牌型“三三三三二”中的“二”
    static $arr = '';          //   将牌标志，即牌型“三三三三二”中的“二”
    if (!remain2($cards)) {     //   递归退出条件：如果没有剩牌，则和牌返回。
        return 1;
    }
    $j = 1;
    for ($i = 1; !$cards[$j] && $i < 38; $i++) {  //   找到有牌的地方，i就是当前牌,   $card[$i]是个数
        $j = $i;
    }
    echo "j= $j <br/>";                       //   跟踪信息
    if ($cards[$j] == 4) {                    //   4张组合(杠子)   如果当前牌数等于4张
        $cards[$j] = 0;                       //   除开全部4张牌
        if (hu2($cards)) {                     //   如果剩余的牌组合成功，和牌
            return 1;
        }
        $cards[$j] = 4;                       //   否则，取消4张组合
    }
    if ($cards[$j] >= 3) {                    //   3张组合(大对)  如果当前牌不少于3张
        $cards[$j] -= 3;                      //   减去3张牌
        if (hu2($cards)) {                     //   如果剩余的牌组合成功，和牌
            return 1;
        }
        $cards[$j] += 3;                      //   取消3张组合
    }
    if (!$jiang && $cards[$j] >= 2) {        //   2张组合(将牌)  如果之前没有将牌，且当前牌不少于2张
        $jiang = 1;                           //   设置将牌标志
        $cards[$j] -= 2;                      //   减去2张牌
        if (hu2($cards)) {                     //   如果剩余的牌组合成功，和牌
            return 1;
        }
        $cards[$j] += 2;                      //   取消2张组合
        $jiang = 0;                           //   清除将牌标志
    }
    if ($j > 30) {                            //   “东南西北中发白”没有顺牌组合，不和
        return 0;
    }
    //   顺牌组合，注意是从前往后组合！
    //   排除数值为8和9的牌
    //   如果后面有连续两张牌
    if ($j % 10 != 8 && $j % 10 != 9 && $cards[$j + 1] && $cards[$j + 2]) {
        //   各牌数减1
        $cards[$j]--;
        $cards[$j + 1]--;
        $cards[$j + 2]--;
        //   如果剩余的牌组合成功，和牌
        if (hu2($cards)) {
            return 1;
        }
        //   恢复各牌数
        $cards[$j]++;
        $cards[$j + 1]++;
        $cards[$j + 2]++;
    }
    return 0;   //   无法全部组合，不和！
}

function hu3($cards, $jiang, $arr)
{
    if (!remain($cards)) {     //   递归退出条件：如果没有剩牌，则和牌返回。
        return $arr;
    }
    $j = 1;
    for ($i = 1; !$cards[$j] && $i < 24; $i++) {  //   找到有牌的地方，i就是当前牌,   $card[$i]是个数
        $j = $i;
    }
//    echo "j= $j <br/>";                       //   跟踪信息
    if ($cards[$j] == 4) {                    //   4张组合(杠子)   如果当前牌数等于4张
        $arr[2][] = $j;
        $cards[$j] = 0;                       //   除开全部4张牌
        if (hu3($cards, $jiang, $arr)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] = 4;                       //   否则，取消4张组合
    }
    if ($cards[$j] >= 3) {                    //   3张组合(大对)  如果当前牌不少于3张
        $arr[4][] = $j;
        $cards[$j] -= 3;                      //   减去3张牌
        if (hu3($cards, $jiang, $arr)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] += 3;                      //   取消3张组合
    }
    if (!$jiang && $cards[$j] >= 2) {        //   2张组合(将牌)  如果之前没有将牌，且当前牌不少于2张
        $jiang = 1;                           //   设置将牌标志
        $arr[1] = $j;
        $cards[$j] -= 2;                      //   减去2张牌
        if (hu3($cards, $jiang, $arr)) {                     //   如果剩余的牌组合成功，和牌
            return $arr;
        }
        $cards[$j] += 2;                      //   取消2张组合
        $jiang = 0;                           //   清除将牌标志
    }
    if ($j > 20) {                            //   “中发白”没有顺牌组合，不和
        return 0;
    }
    //   顺牌组合，注意是从前往后组合！
    //   排除数值为8和9的牌
    //   如果后面有连续两张牌
    if ($j % 10 != 8 && $j % 10 != 9 && $cards[$j + 1] && $cards[$j + 2]) {
        //   各牌数减1
        $cards[$j]--;
        $cards[$j + 1]--;
        $cards[$j + 2]--;
        $arr[3][] = [$j, $j + 1, $j + 2];
        //   如果剩余的牌组合成功，和牌
        if (hu3($cards, $jiang, $arr)) {
            return $arr;
        }
        //   恢复各牌数
        $cards[$j]++;
        $cards[$j + 1]++;
        $cards[$j + 2]++;
    }
    return 0;   //   无法全部组合，不和！
}

function checkLiang($cards, $jiang = 0, $arr = 0)
{
    $pai = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1];
    $arr1 = '';
    foreach ($pai as $k => $v) {
        if ($k == 0 || $k == 10 || $k == 20) {
            continue;
        }
        if ($cards[$k] == 0) {
            if (isset($cards[$k + 1]) && ($cards[$k + 1] == 0)) {
                if (isset($cards[$k + 2]) && ($cards[$k + 2] == 0)) {
                    continue;
                }
            }
        }
//        echo $k.'<br/>';
        $cards[$k] += $v;
//        dp($cards);
        if (hu3($cards, $jiang, $arr1)) {
            $arr['res'][] = $k;
//            echo 'yes<br/>';
            $jiang = 0;
//            dp($cards);
        }
        $cards[$k] -= $v;
        $arr1 = '';
    }
    return $arr;
}


/**
 * 后台使用的URL链接函数，强制使用动态传参数模式
 *
 * @param string $controller control文件名
 * @param string $method op方法名
 * @param array $args URL其它参数
 * @param array $type URL模式  1./参数模式   2.?参数模式
 * @return string
 */
function urlAdmin($controller, $method, $args = [], $type = 1)
{
    $controller = ucfirst($controller);
    if ($type == 2) {
        if ($args && is_array($args)) {
            return action("Admin\\{$controller}Controller@$method") . '?' .
            http_build_query($args);
        }
    }
    if ($args && is_array($args)) {
        return action("Admin\\{$controller}Controller@$method", $args);
    }
    return action("Admin\\{$controller}Controller@$method");
}

function ajax_return($data)
{
    return response()->json($data);
}

/**
 * 浏览器友好的变量输出
 * @param mixed $var 变量
 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
 * @param string $label 标签 默认为空
 * @param boolean $strict 是否严谨 默认为true
 * @return void|string
 */
function dp($var, $echo = true, $label = null, $strict = true)
{
    $label = ($label === null) ? '' : rtrim($label) . ' ';
    if (!$strict) {
        if (ini_get('html_errors')) {
            $output = print_r($var, true);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        } else {
            $output = $label . print_r($var, true);
        }
    } else {
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        if (!extension_loaded('xdebug')) {
            $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        }
    }
    if ($echo) {
        echo($output);
        return null;
    } else
        return $output;
}

function checkGang($cards, $arr)
{

    foreach ($cards as $k => $v) {
        if ($v == 4) {
            $cards[$k] = 0;
            $arr[2][] = $k;
        }
    }
    return ['cards' => $cards, 'data' => $arr];
}

function checkKe($cards, $arr)
{
    foreach ($cards as $k => $v) {
        if ($k == 0 || $k == 10 || $k == 20) {
            continue;
        }
        if ($v >= 3) {
            $cards[$k] -= 3;
            $arr[4][] = $k;
        }
    }
    return ['cards' => $cards, 'data' => $arr];
}

function checkDui($jiang, $cards, $arr)
{
    foreach ($cards as $k => $v) {
        if ($k == 0 || $k == 10 || $k == 20) {
            continue;
        }
        if (!$jiang && $v >= 2) {
            $jiang = 1;
            $cards[$k] -= 2;
            $arr[1][] = $k;
        }
    }
    return ['cards' => $cards, 'jiang' => $jiang, 'data' => $arr];
}

function checkShun($cards, $arr)
{
    foreach ($cards as $k => $v) {
        if ($k == 0 || $k == 10 || $k == 20) {
            continue;
        }
        if ($cards[$k] && isset($cards[$k + 1]) && isset($cards[$k + 2])) {
            if ($k % 10 != 8 && $k % 10 != 9 && $cards[$k + 1] && $cards[$k + 2]) {
                $cards[$k]--;
                $cards[$k + 1]--;
                $cards[$k + 2]--;
                $arr[3][] = $k;
            }
        }

    }
    return ['cards' => $cards, 'data' => $arr];
}


function hu4($cards)
{
    $jiang = 0;
    $arr = '';
    $res = checkGang($cards, $arr);
    $res = checkKe($res['cards'], $res['data']);
    $res = checkDui($jiang, $res['cards'], $res['data']);
    $res = checkShun($res['cards'], $res['data']);;
    if (remain($res['cards']) == 0) {
        return $res['data'];
    }
    return 0;
}

function hu5($cards, $jiang, $arr)
{
    $res = checkGang($cards, $arr);
    $res = checkKe($res['cards'], $res['data']);
    $res = checkDui($jiang, $res['cards'], $res['data']);
    $res = checkShun($res['cards'], $res['data']);;
    if (remain($res['cards']) == 0) {
        return 1;
    }
    return 0;
}

function checkLiang2($cards, $jiang=0, $arr=[])
{
    $pai = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1];
    foreach ($pai as $k => $v) {
        if ($k == 0 || $k == 10 || $k == 20) {
            continue;
        }
        if ($cards[$k] == 0) {
            if (isset($cards[$k + 1]) && ($cards[$k + 1] == 0)) {
                if (isset($cards[$k + 2]) && ($cards[$k + 2] == 0)) {
                    if (isset($cards[$k - 1]) && ($cards[$k - 1] == 0)) {
                        if (!(isset($cards[$k - 2]) && ($cards[$k - 2] == 0))) {
                            continue;
                        }
                    }
                }
            }
        }
        $cards[$k] += $v;
        echo $k . '<br/>';
        dp($cards);
        if (hu5($cards, $jiang, $arr)) {
            echo 'yes<br/>';
            $arr['res'][] = $k;
        }
        $cards[$k] -= $v;
    }
    return $arr;
}

function getPageNoList($totalPage,$pageNo,$pageSize)
{
    $disPageList = 0;//定义最大链接显示数额
    $disPageList = $pageNo + $pageSize - 1;//最大链接显示数额赋值，公式为"当前页数 + 最大链接显示数额 -1"
    //前页面导航页数
    $pageNoList = array();
    //循环显示出当前页面导航页数
    if($disPageList<=$totalPage){
        for($i=$pageNo;$i<=$disPageList;$i++ ){
            $pageNoList[] = $i;
        }
    }else{
        if($totalPage < $pageSize){
            for($i=1;$i<=$totalPage;$i++ ){
                $pageNoList[] = $i;
            }
        }else{
            $start = $totalPage-$pageSize+1;
            for($i=$start;$i<=$totalPage;$i++ ){
                $pageNoList[] = $i;
            }
        }
    }
    return $pageNoList;
}

function getGroupName($gid)
{
    $name = '';
    switch($gid){
        case 0:$name='超级管理员';break;
        case 1:$name='普通管理员';break;
    }
    return $name;
}

//function traceHttp()
//{
//    logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));
//    logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);
//}
//function logger($log_content)
//{
//    if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
//        sae_set_display_errors(false);
//        sae_debug($log_content);
//        sae_set_display_errors(true);
//    }else{ //LOCAL
//        $max_size = 500000;
//        $log_filename = "log.xml";
//        if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
//        file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
//    }
//}
